package br.com.EscolaDinamica.MB;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.persistence.EntityManager;

import br.com.EscolaDinamica.DAO.DAO;
import br.com.EscolaDinamica.entidades.Funcionario;
import br.com.EscolaDinamica.util.FacesUtil;
import br.com.EscolaDinamica.util.JPAUtil;

@ManagedBean
@SessionScoped
public class FuncionarioMB {

	private Funcionario funcionario = new Funcionario();
	private List<Funcionario> listaDeFuncionarios;

	public String gravarFuncionario(){
		//System.out.println("Passou no metodo de gravar");
		
		DAO<Funcionario> dao = new DAO<Funcionario>(Funcionario.class);
		
		if (funcionario.getId() != 0) { 
			dao.atualizaEntidade(funcionario);
		}else{
			dao.salvarEntidade(funcionario);
		}
		funcionario = new Funcionario();
		pesquisarFuncionario();
		
		//dao.salvarEntidade(funcionario);
		
		return "Funcionario?faces-redirect=true";
	}

	public String alterarFuncionario() {
		long id = Long.parseLong(FacesUtil.getRequestParameter("idFuncionario"));

		DAO<Funcionario> dao = new DAO<Funcionario>(Funcionario.class);
		
		this.funcionario = dao.buscaPorId(id);
		
		return "Funcionario?faces-redirect=true";
	}
	
	public String excluirFuncionario(){
		long id = Long.parseLong(FacesUtil.getRequestParameter("idFuncionario"));

		DAO<Funcionario> dao = new DAO<Funcionario>(Funcionario.class);

		funcionario = dao.buscaPorId(id);
		dao.apagarEntidade(funcionario);
		
		funcionario = new Funcionario();
		pesquisarFuncionario();
		
		return "Funcionario?faces-redirect=true";
	}
	
	public String listarTodosFuncionarios(){
		DAO<Funcionario> dao = new DAO<Funcionario>(Funcionario.class);
		
		listaDeFuncionarios = dao.listaTodos();
		
		return "ListagemDeFuncionarios?faces-redirect=true";
	}

	@SuppressWarnings("unchecked")
	public String pesquisarFuncionario(){
		EntityManager em = new JPAUtil().getEntityManager();
		String nome = "%" + funcionario.getNome() + "%";
		listaDeFuncionarios = em.createNamedQuery("funcionario.pesquisarFuncionarioPorNome").
				setParameter("nome", nome).getResultList();
		
		return "Funcionario?faces-redirect=true";
	}
	
	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public List<Funcionario> getListaDeFuncionarios() {
		return listaDeFuncionarios;
	}

	public void setListaDeFuncionarios(List<Funcionario> listaDeFuncionarios) {
		this.listaDeFuncionarios = listaDeFuncionarios;
	}
}